import axios from 'axios'
export default {
  namespaced: true,
  state () {
    return {
      // 借阅表数据
      checkOutList: [],
      // 存储图书借阅排行榜数据
      bookRanking: []
    }
  },
  mutations: {
    // 更新vuex数据
    updateList (state, newList) {
      state.checkOutList = newList
    },
    // 删除
    deletecheckOutList (state, id) {
      state.checkOutList = state.checkOutList.filter(checkOut => checkOut.id !== id)
    },
    // 更新排行榜数据
    updateRanking (state, rankingList) {
      state.bookRanking = rankingList
    }
  },
  actions: {
    async getList (context) {
      const res = await axios.get('http://localhost:3000/checkoutRecords')
      console.log('借阅列表获取操作提示：' + res.statusText)
      // 根据return字段，true修改为已归还，false修改为未归还
      // 如果dueDate在当前日期之前，则修改为已超期
      const updatedData = res.data.map(item => {
        let status
        if (item.return) {
          status = '已归还'
        } else {
          status = '未归还'
        }
        const dueDate = new Date(item.dueDate)
        const currentDate = new Date()
        if (dueDate < currentDate && status === '未归还') {
          status = '已超期'
        }
        return {
          ...item,
          status
        }
      })
      console.log(updatedData)
      context.commit('updateList', updatedData)
    },
    async postCheckOut (context, add) {
      const res = await axios.post('http://localhost:3000/checkoutRecords', add)
      console.log(res.statusText)
      context.commit('updateList', res.data)
    },
    async deleteCheckOut (context, id) {
      console.log(id)
      const res = await axios.delete(`http://localhost:3000/checkoutRecords/${id}`)
      console.log('借阅删除操作提示：' + res)
      context.commit('deletecheckOutList', id)
      context.dispatch('getRanking')
    },
    async getRanking (context) {
      try {
        // 从服务器获取借阅记录数据
        const res = await axios.get('http://localhost:3000/checkoutRecords')
        console.log('借阅列表获取操作提示：' + res.statusText)
        // 对数据进行处理，找出借阅同一本书的记录，并将借阅人数累加
        const bookCountMap = new Map()
        res.data.forEach(record => {
          if (bookCountMap.has(record.book)) {
            bookCountMap.get(record.book).borrowCount += 1
          } else {
            bookCountMap.set(record.book, { book: record.book, borrowCount: 1, users: [record.user] })
          }
        })
        // 将 Map 中的值转换为数组
        const processedList = Array.from(bookCountMap.values())
        // 对处理后的列表进行排序，按照借阅人数降序排列
        const sortedList = processedList.slice().sort((a, b) => b.borrowCount - a.borrowCount).slice(0, 3)
        // 给排序后的图书添加排行序号
        sortedList.forEach((book, index) => {
          book.rank = index + 1
        })
        console.log(sortedList)
        // 调用 mutations 中的 updateRanking 方法更新排行榜数据
        context.commit('updateRanking', sortedList)
      } catch (error) {
        console.error('获取排行榜数据出错:', error)
      }
    }
  },
  getters: {
  }
}
